/*! Hammer.JS - v2.0.8 - 2016-04-23
 * http://hammerjs.github.io/
 *
 * Copyright (c) 2016 Jorik Tangelder;
 * Licensed under the MIT license */
!(function (a, b, c, d) {
  'use strict';
  function e(a, b, c) {
    return setTimeout(j(a, c), b);
  }
  function f(a, b, c) {
    return Array.isArray(a) ? (g(a, c[b], c), !0) : !1;
  }
  function g(a, b, c) {
    var e;
    if (a)
      if (a.forEach) a.forEach(b, c);
      else if (a.length !== d)
        for (e = 0; e < a.length; ) b.call(c, a[e], e, a), e++;
      else for (e in a) a.hasOwnProperty(e) && b.call(c, a[e], e, a);
  }
  function h(b, c, d) {
    var e = 'DEPRECATED METHOD: ' + c + '\n' + d + ' AT \n';
    return function () {
      var c = new Error('get-stack-trace'),
        d =
          c && c.stack
            ? c.stack
                .replace(/^[^\(]+?[\n$]/gm, '')
                .replace(/^\s+at\s+/gm, '')
                .replace(/^Object.<anonymous>\s*\(/gm, '{anonymous}()@')
            : 'Unknown Stack Trace',
        f = a.console && (a.console.warn || a.console.log);
      return f && f.call(a.console, e, d), b.apply(this, arguments);
    };
  }
  function i(a, b, c) {
    var d,
      e = b.prototype;
    (d = a.prototype = Object.create(e)),
      (d.constructor = a),
      (d._super = e),
      c && la(d, c);
  }
  function j(a, b) {
    return function () {
      return a.apply(b, arguments);
    };
  }
  function k(a, b) {
    return typeof a == oa ? a.apply(b ? b[0] || d : d, b) : a;
  }
  function l(a, b) {
    return a === d ? b : a;
  }
  function m(a, b, c) {
    g(q(b), function (b) {
      a.addEventListener(b, c, !1);
    });
  }
  function n(a, b, c) {
    g(q(b), function (b) {
      a.removeEventListener(b, c, !1);
    });
  }
  function o(a, b) {
    for (; a; ) {
      if (a == b) return !0;
      a = a.parentNode;
    }
    return !1;
  }
  function p(a, b) {
    return a.indexOf(b) > -1;
  }
  function q(a) {
    return a.trim().split(/\s+/g);
  }
  function r(a, b, c) {
    if (a.indexOf && !c) return a.indexOf(b);
    for (var d = 0; d < a.length; ) {
      if ((c && a[d][c] == b) || (!c && a[d] === b)) return d;
      d++;
    }
    return -1;
  }
  function s(a) {
    return Array.prototype.slice.call(a, 0);
  }
  function t(a, b, c) {
    for (var d = [], e = [], f = 0; f < a.length; ) {
      var g = b ? a[f][b] : a[f];
      r(e, g) < 0 && d.push(a[f]), (e[f] = g), f++;
    }
    return (
      c &&
        (d = b
          ? d.sort(function (a, c) {
              return a[b] > c[b];
            })
          : d.sort()),
      d
    );
  }
  function u(a, b) {
    for (
      var c, e, f = b[0].toUpperCase() + b.slice(1), g = 0;
      g < ma.length;

    ) {
      if (((c = ma[g]), (e = c ? c + f : b), e in a)) return e;
      g++;
    }
    return d;
  }
  function v() {
    return ua++;
  }
  function w(b) {
    var c = b.ownerDocument || b;
    return c.defaultView || c.parentWindow || a;
  }
  function x(a, b) {
    var c = this;
    (this.manager = a),
      (this.callback = b),
      (this.element = a.element),
      (this.target = a.options.inputTarget),
      (this.domHandler = function (b) {
        k(a.options.enable, [a]) && c.handler(b);
      }),
      this.init();
  }
  function y(a) {
    var b,
      c = a.options.inputClass;
    return new (b = c ? c : xa ? M : ya ? P : wa ? R : L)(a, z);
  }
  function z(a, b, c) {
    var d = c.pointers.length,
      e = c.changedPointers.length,
      f = b & Ea && d - e === 0,
      g = b & (Ga | Ha) && d - e === 0;
    (c.isFirst = !!f),
      (c.isFinal = !!g),
      f && (a.session = {}),
      (c.eventType = b),
      A(a, c),
      a.emit('hammer.input', c),
      a.recognize(c),
      (a.session.prevInput = c);
  }
  function A(a, b) {
    var c = a.session,
      d = b.pointers,
      e = d.length;
    c.firstInput || (c.firstInput = D(b)),
      e > 1 && !c.firstMultiple
        ? (c.firstMultiple = D(b))
        : 1 === e && (c.firstMultiple = !1);
    var f = c.firstInput,
      g = c.firstMultiple,
      h = g ? g.center : f.center,
      i = (b.center = E(d));
    (b.timeStamp = ra()),
      (b.deltaTime = b.timeStamp - f.timeStamp),
      (b.angle = I(h, i)),
      (b.distance = H(h, i)),
      B(c, b),
      (b.offsetDirection = G(b.deltaX, b.deltaY));
    var j = F(b.deltaTime, b.deltaX, b.deltaY);
    (b.overallVelocityX = j.x),
      (b.overallVelocityY = j.y),
      (b.overallVelocity = qa(j.x) > qa(j.y) ? j.x : j.y),
      (b.scale = g ? K(g.pointers, d) : 1),
      (b.rotation = g ? J(g.pointers, d) : 0),
      (b.maxPointers = c.prevInput
        ? b.pointers.length > c.prevInput.maxPointers
          ? b.pointers.length
          : c.prevInput.maxPointers
        : b.pointers.length),
      C(c, b);
    var k = a.element;
    o(b.srcEvent.target, k) && (k = b.srcEvent.target), (b.target = k);
  }
  function B(a, b) {
    var c = b.center,
      d = a.offsetDelta || {},
      e = a.prevDelta || {},
      f = a.prevInput || {};
    (b.eventType !== Ea && f.eventType !== Ga) ||
      ((e = a.prevDelta = { x: f.deltaX || 0, y: f.deltaY || 0 }),
      (d = a.offsetDelta = { x: c.x, y: c.y })),
      (b.deltaX = e.x + (c.x - d.x)),
      (b.deltaY = e.y + (c.y - d.y));
  }
  function C(a, b) {
    var c,
      e,
      f,
      g,
      h = a.lastInterval || b,
      i = b.timeStamp - h.timeStamp;
    if (b.eventType != Ha && (i > Da || h.velocity === d)) {
      var j = b.deltaX - h.deltaX,
        k = b.deltaY - h.deltaY,
        l = F(i, j, k);
      (e = l.x),
        (f = l.y),
        (c = qa(l.x) > qa(l.y) ? l.x : l.y),
        (g = G(j, k)),
        (a.lastInterval = b);
    } else
      (c = h.velocity), (e = h.velocityX), (f = h.velocityY), (g = h.direction);
    (b.velocity = c), (b.velocityX = e), (b.velocityY = f), (b.direction = g);
  }
  function D(a) {
    for (var b = [], c = 0; c < a.pointers.length; )
      (b[c] = {
        clientX: pa(a.pointers[c].clientX),
        clientY: pa(a.pointers[c].clientY),
      }),
        c++;
    return {
      timeStamp: ra(),
      pointers: b,
      center: E(b),
      deltaX: a.deltaX,
      deltaY: a.deltaY,
    };
  }
  function E(a) {
    var b = a.length;
    if (1 === b) return { x: pa(a[0].clientX), y: pa(a[0].clientY) };
    for (var c = 0, d = 0, e = 0; b > e; )
      (c += a[e].clientX), (d += a[e].clientY), e++;
    return { x: pa(c / b), y: pa(d / b) };
  }
  function F(a, b, c) {
    return { x: b / a || 0, y: c / a || 0 };
  }
  function G(a, b) {
    return a === b ? Ia : qa(a) >= qa(b) ? (0 > a ? Ja : Ka) : 0 > b ? La : Ma;
  }
  function H(a, b, c) {
    c || (c = Qa);
    var d = b[c[0]] - a[c[0]],
      e = b[c[1]] - a[c[1]];
    return Math.sqrt(d * d + e * e);
  }
  function I(a, b, c) {
    c || (c = Qa);
    var d = b[c[0]] - a[c[0]],
      e = b[c[1]] - a[c[1]];
    return (180 * Math.atan2(e, d)) / Math.PI;
  }
  function J(a, b) {
    return I(b[1], b[0], Ra) + I(a[1], a[0], Ra);
  }
  function K(a, b) {
    return H(b[0], b[1], Ra) / H(a[0], a[1], Ra);
  }
  function L() {
    (this.evEl = Ta),
      (this.evWin = Ua),
      (this.pressed = !1),
      x.apply(this, arguments);
  }
  function M() {
    (this.evEl = Xa),
      (this.evWin = Ya),
      x.apply(this, arguments),
      (this.store = this.manager.session.pointerEvents = []);
  }
  function N() {
    (this.evTarget = $a),
      (this.evWin = _a),
      (this.started = !1),
      x.apply(this, arguments);
  }
  function O(a, b) {
    var c = s(a.touches),
      d = s(a.changedTouches);
    return b & (Ga | Ha) && (c = t(c.concat(d), 'identifier', !0)), [c, d];
  }
  function P() {
    (this.evTarget = bb), (this.targetIds = {}), x.apply(this, arguments);
  }
  function Q(a, b) {
    var c = s(a.touches),
      d = this.targetIds;
    if (b & (Ea | Fa) && 1 === c.length)
      return (d[c[0].identifier] = !0), [c, c];
    var e,
      f,
      g = s(a.changedTouches),
      h = [],
      i = this.target;
    if (
      ((f = c.filter(function (a) {
        return o(a.target, i);
      })),
      b === Ea)
    )
      for (e = 0; e < f.length; ) (d[f[e].identifier] = !0), e++;
    for (e = 0; e < g.length; )
      d[g[e].identifier] && h.push(g[e]),
        b & (Ga | Ha) && delete d[g[e].identifier],
        e++;
    return h.length ? [t(f.concat(h), 'identifier', !0), h] : void 0;
  }
  function R() {
    x.apply(this, arguments);
    var a = j(this.handler, this);
    (this.touch = new P(this.manager, a)),
      (this.mouse = new L(this.manager, a)),
      (this.primaryTouch = null),
      (this.lastTouches = []);
  }
  function S(a, b) {
    a & Ea
      ? ((this.primaryTouch = b.changedPointers[0].identifier), T.call(this, b))
      : a & (Ga | Ha) && T.call(this, b);
  }
  function T(a) {
    var b = a.changedPointers[0];
    if (b.identifier === this.primaryTouch) {
      var c = { x: b.clientX, y: b.clientY };
      this.lastTouches.push(c);
      var d = this.lastTouches,
        e = function () {
          var a = d.indexOf(c);
          a > -1 && d.splice(a, 1);
        };
      setTimeout(e, cb);
    }
  }
  function U(a) {
    for (
      var b = a.srcEvent.clientX, c = a.srcEvent.clientY, d = 0;
      d < this.lastTouches.length;
      d++
    ) {
      var e = this.lastTouches[d],
        f = Math.abs(b - e.x),
        g = Math.abs(c - e.y);
      if (db >= f && db >= g) return !0;
    }
    return !1;
  }
  function V(a, b) {
    (this.manager = a), this.set(b);
  }
  function W(a) {
    if (p(a, jb)) return jb;
    var b = p(a, kb),
      c = p(a, lb);
    return b && c ? jb : b || c ? (b ? kb : lb) : p(a, ib) ? ib : hb;
  }
  function X() {
    if (!fb) return !1;
    var b = {},
      c = a.CSS && a.CSS.supports;
    return (
      ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(
        function (d) {
          b[d] = c ? a.CSS.supports('touch-action', d) : !0;
        },
      ),
      b
    );
  }
  function Y(a) {
    (this.options = la({}, this.defaults, a || {})),
      (this.id = v()),
      (this.manager = null),
      (this.options.enable = l(this.options.enable, !0)),
      (this.state = nb),
      (this.simultaneous = {}),
      (this.requireFail = []);
  }
  function Z(a) {
    return a & sb
      ? 'cancel'
      : a & qb
      ? 'end'
      : a & pb
      ? 'move'
      : a & ob
      ? 'start'
      : '';
  }
  function $(a) {
    return a == Ma
      ? 'down'
      : a == La
      ? 'up'
      : a == Ja
      ? 'left'
      : a == Ka
      ? 'right'
      : '';
  }
  function _(a, b) {
    var c = b.manager;
    return c ? c.get(a) : a;
  }
  function aa() {
    Y.apply(this, arguments);
  }
  function ba() {
    aa.apply(this, arguments), (this.pX = null), (this.pY = null);
  }
  function ca() {
    aa.apply(this, arguments);
  }
  function da() {
    Y.apply(this, arguments), (this._timer = null), (this._input = null);
  }
  function ea() {
    aa.apply(this, arguments);
  }
  function fa() {
    aa.apply(this, arguments);
  }
  function ga() {
    Y.apply(this, arguments),
      (this.pTime = !1),
      (this.pCenter = !1),
      (this._timer = null),
      (this._input = null),
      (this.count = 0);
  }
  function ha(a, b) {
    return (
      (b = b || {}),
      (b.recognizers = l(b.recognizers, ha.defaults.preset)),
      new ia(a, b)
    );
  }
  function ia(a, b) {
    (this.options = la({}, ha.defaults, b || {})),
      (this.options.inputTarget = this.options.inputTarget || a),
      (this.handlers = {}),
      (this.session = {}),
      (this.recognizers = []),
      (this.oldCssProps = {}),
      (this.element = a),
      (this.input = y(this)),
      (this.touchAction = new V(this, this.options.touchAction)),
      ja(this, !0),
      g(
        this.options.recognizers,
        function (a) {
          var b = this.add(new a[0](a[1]));
          a[2] && b.recognizeWith(a[2]), a[3] && b.requireFailure(a[3]);
        },
        this,
      );
  }
  function ja(a, b) {
    var c = a.element;
    if (c.style) {
      var d;
      g(a.options.cssProps, function (e, f) {
        (d = u(c.style, f)),
          b
            ? ((a.oldCssProps[d] = c.style[d]), (c.style[d] = e))
            : (c.style[d] = a.oldCssProps[d] || '');
      }),
        b || (a.oldCssProps = {});
    }
  }
  function ka(a, c) {
    var d = b.createEvent('Event');
    d.initEvent(a, !0, !0), (d.gesture = c), c.target.dispatchEvent(d);
  }
  var la,
    ma = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'],
    na = b.createElement('div'),
    oa = 'function',
    pa = Math.round,
    qa = Math.abs,
    ra = Date.now;
  la =
    'function' != typeof Object.assign
      ? function (a) {
          if (a === d || null === a)
            throw new TypeError('Cannot convert undefined or null to object');
          for (var b = Object(a), c = 1; c < arguments.length; c++) {
            var e = arguments[c];
            if (e !== d && null !== e)
              for (var f in e) e.hasOwnProperty(f) && (b[f] = e[f]);
          }
          return b;
        }
      : Object.assign;
  var sa = h(
      function (a, b, c) {
        for (var e = Object.keys(b), f = 0; f < e.length; )
          (!c || (c && a[e[f]] === d)) && (a[e[f]] = b[e[f]]), f++;
        return a;
      },
      'extend',
      'Use `assign`.',
    ),
    ta = h(
      function (a, b) {
        return sa(a, b, !0);
      },
      'merge',
      'Use `assign`.',
    ),
    ua = 1,
    va = /mobile|tablet|ip(ad|hone|od)|android/i,
    wa = 'ontouchstart' in a,
    xa = u(a, 'PointerEvent') !== d,
    ya = wa && va.test(navigator.userAgent),
    za = 'touch',
    Aa = 'pen',
    Ba = 'mouse',
    Ca = 'kinect',
    Da = 25,
    Ea = 1,
    Fa = 2,
    Ga = 4,
    Ha = 8,
    Ia = 1,
    Ja = 2,
    Ka = 4,
    La = 8,
    Ma = 16,
    Na = Ja | Ka,
    Oa = La | Ma,
    Pa = Na | Oa,
    Qa = ['x', 'y'],
    Ra = ['clientX', 'clientY'];
  x.prototype = {
    handler: function () {},
    init: function () {
      this.evEl && m(this.element, this.evEl, this.domHandler),
        this.evTarget && m(this.target, this.evTarget, this.domHandler),
        this.evWin && m(w(this.element), this.evWin, this.domHandler);
    },
    destroy: function () {
      this.evEl && n(this.element, this.evEl, this.domHandler),
        this.evTarget && n(this.target, this.evTarget, this.domHandler),
        this.evWin && n(w(this.element), this.evWin, this.domHandler);
    },
  };
  var Sa = { mousedown: Ea, mousemove: Fa, mouseup: Ga },
    Ta = 'mousedown',
    Ua = 'mousemove mouseup';
  i(L, x, {
    handler: function (a) {
      var b = Sa[a.type];
      b & Ea && 0 === a.button && (this.pressed = !0),
        b & Fa && 1 !== a.which && (b = Ga),
        this.pressed &&
          (b & Ga && (this.pressed = !1),
          this.callback(this.manager, b, {
            pointers: [a],
            changedPointers: [a],
            pointerType: Ba,
            srcEvent: a,
          }));
    },
  });
  var Va = {
      pointerdown: Ea,
      pointermove: Fa,
      pointerup: Ga,
      pointercancel: Ha,
      pointerout: Ha,
    },
    Wa = { 2: za, 3: Aa, 4: Ba, 5: Ca },
    Xa = 'pointerdown',
    Ya = 'pointermove pointerup pointercancel';
  a.MSPointerEvent &&
    !a.PointerEvent &&
    ((Xa = 'MSPointerDown'),
    (Ya = 'MSPointerMove MSPointerUp MSPointerCancel')),
    i(M, x, {
      handler: function (a) {
        var b = this.store,
          c = !1,
          d = a.type.toLowerCase().replace('ms', ''),
          e = Va[d],
          f = Wa[a.pointerType] || a.pointerType,
          g = f == za,
          h = r(b, a.pointerId, 'pointerId');
        e & Ea && (0 === a.button || g)
          ? 0 > h && (b.push(a), (h = b.length - 1))
          : e & (Ga | Ha) && (c = !0),
          0 > h ||
            ((b[h] = a),
            this.callback(this.manager, e, {
              pointers: b,
              changedPointers: [a],
              pointerType: f,
              srcEvent: a,
            }),
            c && b.splice(h, 1));
      },
    });
  var Za = { touchstart: Ea, touchmove: Fa, touchend: Ga, touchcancel: Ha },
    $a = 'touchstart',
    _a = 'touchstart touchmove touchend touchcancel';
  i(N, x, {
    handler: function (a) {
      var b = Za[a.type];
      if ((b === Ea && (this.started = !0), this.started)) {
        var c = O.call(this, a, b);
        b & (Ga | Ha) && c[0].length - c[1].length === 0 && (this.started = !1),
          this.callback(this.manager, b, {
            pointers: c[0],
            changedPointers: c[1],
            pointerType: za,
            srcEvent: a,
          });
      }
    },
  });
  var ab = { touchstart: Ea, touchmove: Fa, touchend: Ga, touchcancel: Ha },
    bb = 'touchstart touchmove touchend touchcancel';
  i(P, x, {
    handler: function (a) {
      var b = ab[a.type],
        c = Q.call(this, a, b);
      c &&
        this.callback(this.manager, b, {
          pointers: c[0],
          changedPointers: c[1],
          pointerType: za,
          srcEvent: a,
        });
    },
  });
  var cb = 2500,
    db = 25;
  i(R, x, {
    handler: function (a, b, c) {
      var d = c.pointerType == za,
        e = c.pointerType == Ba;
      if (
        !(e && c.sourceCapabilities && c.sourceCapabilities.firesTouchEvents)
      ) {
        if (d) S.call(this, b, c);
        else if (e && U.call(this, c)) return;
        this.callback(a, b, c);
      }
    },
    destroy: function () {
      this.touch.destroy(), this.mouse.destroy();
    },
  });
  var eb = u(na.style, 'touchAction'),
    fb = eb !== d,
    gb = 'compute',
    hb = 'auto',
    ib = 'manipulation',
    jb = 'none',
    kb = 'pan-x',
    lb = 'pan-y',
    mb = X();
  V.prototype = {
    set: function (a) {
      a == gb && (a = this.compute()),
        fb &&
          this.manager.element.style &&
          mb[a] &&
          (this.manager.element.style[eb] = a),
        (this.actions = a.toLowerCase().trim());
    },
    update: function () {
      this.set(this.manager.options.touchAction);
    },
    compute: function () {
      var a = [];
      return (
        g(this.manager.recognizers, function (b) {
          k(b.options.enable, [b]) && (a = a.concat(b.getTouchAction()));
        }),
        W(a.join(' '))
      );
    },
    preventDefaults: function (a) {
      var b = a.srcEvent,
        c = a.offsetDirection;
      if (this.manager.session.prevented) return void b.preventDefault();
      var d = this.actions,
        e = p(d, jb) && !mb[jb],
        f = p(d, lb) && !mb[lb],
        g = p(d, kb) && !mb[kb];
      if (e) {
        var h = 1 === a.pointers.length,
          i = a.distance < 2,
          j = a.deltaTime < 250;
        if (h && i && j) return;
      }
      return g && f
        ? void 0
        : e || (f && c & Na) || (g && c & Oa)
        ? this.preventSrc(b)
        : void 0;
    },
    preventSrc: function (a) {
      (this.manager.session.prevented = !0), a.preventDefault();
    },
  };
  var nb = 1,
    ob = 2,
    pb = 4,
    qb = 8,
    rb = qb,
    sb = 16,
    tb = 32;
  (Y.prototype = {
    defaults: {},
    set: function (a) {
      return (
        la(this.options, a),
        this.manager && this.manager.touchAction.update(),
        this
      );
    },
    recognizeWith: function (a) {
      if (f(a, 'recognizeWith', this)) return this;
      var b = this.simultaneous;
      return (
        (a = _(a, this)),
        b[a.id] || ((b[a.id] = a), a.recognizeWith(this)),
        this
      );
    },
    dropRecognizeWith: function (a) {
      return f(a, 'dropRecognizeWith', this)
        ? this
        : ((a = _(a, this)), delete this.simultaneous[a.id], this);
    },
    requireFailure: function (a) {
      if (f(a, 'requireFailure', this)) return this;
      var b = this.requireFail;
      return (
        (a = _(a, this)),
        -1 === r(b, a) && (b.push(a), a.requireFailure(this)),
        this
      );
    },
    dropRequireFailure: function (a) {
      if (f(a, 'dropRequireFailure', this)) return this;
      a = _(a, this);
      var b = r(this.requireFail, a);
      return b > -1 && this.requireFail.splice(b, 1), this;
    },
    hasRequireFailures: function () {
      return this.requireFail.length > 0;
    },
    canRecognizeWith: function (a) {
      return !!this.simultaneous[a.id];
    },
    emit: function (a) {
      function b(b) {
        c.manager.emit(b, a);
      }
      var c = this,
        d = this.state;
      qb > d && b(c.options.event + Z(d)),
        b(c.options.event),
        a.additionalEvent && b(a.additionalEvent),
        d >= qb && b(c.options.event + Z(d));
    },
    tryEmit: function (a) {
      return this.canEmit() ? this.emit(a) : void (this.state = tb);
    },
    canEmit: function () {
      for (var a = 0; a < this.requireFail.length; ) {
        if (!(this.requireFail[a].state & (tb | nb))) return !1;
        a++;
      }
      return !0;
    },
    recognize: function (a) {
      var b = la({}, a);
      return k(this.options.enable, [this, b])
        ? (this.state & (rb | sb | tb) && (this.state = nb),
          (this.state = this.process(b)),
          void (this.state & (ob | pb | qb | sb) && this.tryEmit(b)))
        : (this.reset(), void (this.state = tb));
    },
    process: function (a) {},
    getTouchAction: function () {},
    reset: function () {},
  }),
    i(aa, Y, {
      defaults: { pointers: 1 },
      attrTest: function (a) {
        var b = this.options.pointers;
        return 0 === b || a.pointers.length === b;
      },
      process: function (a) {
        var b = this.state,
          c = a.eventType,
          d = b & (ob | pb),
          e = this.attrTest(a);
        return d && (c & Ha || !e)
          ? b | sb
          : d || e
          ? c & Ga
            ? b | qb
            : b & ob
            ? b | pb
            : ob
          : tb;
      },
    }),
    i(ba, aa, {
      defaults: { event: 'pan', threshold: 10, pointers: 1, direction: Pa },
      getTouchAction: function () {
        var a = this.options.direction,
          b = [];
        return a & Na && b.push(lb), a & Oa && b.push(kb), b;
      },
      directionTest: function (a) {
        var b = this.options,
          c = !0,
          d = a.distance,
          e = a.direction,
          f = a.deltaX,
          g = a.deltaY;
        return (
          e & b.direction ||
            (b.direction & Na
              ? ((e = 0 === f ? Ia : 0 > f ? Ja : Ka),
                (c = f != this.pX),
                (d = Math.abs(a.deltaX)))
              : ((e = 0 === g ? Ia : 0 > g ? La : Ma),
                (c = g != this.pY),
                (d = Math.abs(a.deltaY)))),
          (a.direction = e),
          c && d > b.threshold && e & b.direction
        );
      },
      attrTest: function (a) {
        return (
          aa.prototype.attrTest.call(this, a) &&
          (this.state & ob || (!(this.state & ob) && this.directionTest(a)))
        );
      },
      emit: function (a) {
        (this.pX = a.deltaX), (this.pY = a.deltaY);
        var b = $(a.direction);
        b && (a.additionalEvent = this.options.event + b),
          this._super.emit.call(this, a);
      },
    }),
    i(ca, aa, {
      defaults: { event: 'pinch', threshold: 0, pointers: 2 },
      getTouchAction: function () {
        return [jb];
      },
      attrTest: function (a) {
        return (
          this._super.attrTest.call(this, a) &&
          (Math.abs(a.scale - 1) > this.options.threshold || this.state & ob)
        );
      },
      emit: function (a) {
        if (1 !== a.scale) {
          var b = a.scale < 1 ? 'in' : 'out';
          a.additionalEvent = this.options.event + b;
        }
        this._super.emit.call(this, a);
      },
    }),
    i(da, Y, {
      defaults: { event: 'press', pointers: 1, time: 251, threshold: 9 },
      getTouchAction: function () {
        return [hb];
      },
      process: function (a) {
        var b = this.options,
          c = a.pointers.length === b.pointers,
          d = a.distance < b.threshold,
          f = a.deltaTime > b.time;
        if (((this._input = a), !d || !c || (a.eventType & (Ga | Ha) && !f)))
          this.reset();
        else if (a.eventType & Ea)
          this.reset(),
            (this._timer = e(
              function () {
                (this.state = rb), this.tryEmit();
              },
              b.time,
              this,
            ));
        else if (a.eventType & Ga) return rb;
        return tb;
      },
      reset: function () {
        clearTimeout(this._timer);
      },
      emit: function (a) {
        this.state === rb &&
          (a && a.eventType & Ga
            ? this.manager.emit(this.options.event + 'up', a)
            : ((this._input.timeStamp = ra()),
              this.manager.emit(this.options.event, this._input)));
      },
    }),
    i(ea, aa, {
      defaults: { event: 'rotate', threshold: 0, pointers: 2 },
      getTouchAction: function () {
        return [jb];
      },
      attrTest: function (a) {
        return (
          this._super.attrTest.call(this, a) &&
          (Math.abs(a.rotation) > this.options.threshold || this.state & ob)
        );
      },
    }),
    i(fa, aa, {
      defaults: {
        event: 'swipe',
        threshold: 10,
        velocity: 0.3,
        direction: Na | Oa,
        pointers: 1,
      },
      getTouchAction: function () {
        return ba.prototype.getTouchAction.call(this);
      },
      attrTest: function (a) {
        var b,
          c = this.options.direction;
        return (
          c & (Na | Oa)
            ? (b = a.overallVelocity)
            : c & Na
            ? (b = a.overallVelocityX)
            : c & Oa && (b = a.overallVelocityY),
          this._super.attrTest.call(this, a) &&
            c & a.offsetDirection &&
            a.distance > this.options.threshold &&
            a.maxPointers == this.options.pointers &&
            qa(b) > this.options.velocity &&
            a.eventType & Ga
        );
      },
      emit: function (a) {
        var b = $(a.offsetDirection);
        b && this.manager.emit(this.options.event + b, a),
          this.manager.emit(this.options.event, a);
      },
    }),
    i(ga, Y, {
      defaults: {
        event: 'tap',
        pointers: 1,
        taps: 1,
        interval: 300,
        time: 250,
        threshold: 9,
        posThreshold: 10,
      },
      getTouchAction: function () {
        return [ib];
      },
      process: function (a) {
        var b = this.options,
          c = a.pointers.length === b.pointers,
          d = a.distance < b.threshold,
          f = a.deltaTime < b.time;
        if ((this.reset(), a.eventType & Ea && 0 === this.count))
          return this.failTimeout();
        if (d && f && c) {
          if (a.eventType != Ga) return this.failTimeout();
          var g = this.pTime ? a.timeStamp - this.pTime < b.interval : !0,
            h = !this.pCenter || H(this.pCenter, a.center) < b.posThreshold;
          (this.pTime = a.timeStamp),
            (this.pCenter = a.center),
            h && g ? (this.count += 1) : (this.count = 1),
            (this._input = a);
          var i = this.count % b.taps;
          if (0 === i)
            return this.hasRequireFailures()
              ? ((this._timer = e(
                  function () {
                    (this.state = rb), this.tryEmit();
                  },
                  b.interval,
                  this,
                )),
                ob)
              : rb;
        }
        return tb;
      },
      failTimeout: function () {
        return (
          (this._timer = e(
            function () {
              this.state = tb;
            },
            this.options.interval,
            this,
          )),
          tb
        );
      },
      reset: function () {
        clearTimeout(this._timer);
      },
      emit: function () {
        this.state == rb &&
          ((this._input.tapCount = this.count),
          this.manager.emit(this.options.event, this._input));
      },
    }),
    (ha.VERSION = '2.0.8'),
    (ha.defaults = {
      domEvents: !1,
      touchAction: gb,
      enable: !0,
      inputTarget: null,
      inputClass: null,
      preset: [
        [ea, { enable: !1 }],
        [ca, { enable: !1 }, ['rotate']],
        [fa, { direction: Na }],
        [ba, { direction: Na }, ['swipe']],
        [ga],
        [ga, { event: 'doubletap', taps: 2 }, ['tap']],
        [da],
      ],
      cssProps: {
        userSelect: 'none',
        touchSelect: 'none',
        touchCallout: 'none',
        contentZooming: 'none',
        userDrag: 'none',
        tapHighlightColor: 'rgba(0,0,0,0)',
      },
    });
  var ub = 1,
    vb = 2;
  (ia.prototype = {
    set: function (a) {
      return (
        la(this.options, a),
        a.touchAction && this.touchAction.update(),
        a.inputTarget &&
          (this.input.destroy(),
          (this.input.target = a.inputTarget),
          this.input.init()),
        this
      );
    },
    stop: function (a) {
      this.session.stopped = a ? vb : ub;
    },
    recognize: function (a) {
      var b = this.session;
      if (!b.stopped) {
        this.touchAction.preventDefaults(a);
        var c,
          d = this.recognizers,
          e = b.curRecognizer;
        (!e || (e && e.state & rb)) && (e = b.curRecognizer = null);
        for (var f = 0; f < d.length; )
          (c = d[f]),
            b.stopped === vb || (e && c != e && !c.canRecognizeWith(e))
              ? c.reset()
              : c.recognize(a),
            !e && c.state & (ob | pb | qb) && (e = b.curRecognizer = c),
            f++;
      }
    },
    get: function (a) {
      if (a instanceof Y) return a;
      for (var b = this.recognizers, c = 0; c < b.length; c++)
        if (b[c].options.event == a) return b[c];
      return null;
    },
    add: function (a) {
      if (f(a, 'add', this)) return this;
      var b = this.get(a.options.event);
      return (
        b && this.remove(b),
        this.recognizers.push(a),
        (a.manager = this),
        this.touchAction.update(),
        a
      );
    },
    remove: function (a) {
      if (f(a, 'remove', this)) return this;
      if ((a = this.get(a))) {
        var b = this.recognizers,
          c = r(b, a);
        -1 !== c && (b.splice(c, 1), this.touchAction.update());
      }
      return this;
    },
    on: function (a, b) {
      if (a !== d && b !== d) {
        var c = this.handlers;
        return (
          g(q(a), function (a) {
            (c[a] = c[a] || []), c[a].push(b);
          }),
          this
        );
      }
    },
    off: function (a, b) {
      if (a !== d) {
        var c = this.handlers;
        return (
          g(q(a), function (a) {
            b ? c[a] && c[a].splice(r(c[a], b), 1) : delete c[a];
          }),
          this
        );
      }
    },
    emit: function (a, b) {
      this.options.domEvents && ka(a, b);
      var c = this.handlers[a] && this.handlers[a].slice();
      if (c && c.length) {
        (b.type = a),
          (b.preventDefault = function () {
            b.srcEvent.preventDefault();
          });
        for (var d = 0; d < c.length; ) c[d](b), d++;
      }
    },
    destroy: function () {
      this.element && ja(this, !1),
        (this.handlers = {}),
        (this.session = {}),
        this.input.destroy(),
        (this.element = null);
    },
  }),
    la(ha, {
      INPUT_START: Ea,
      INPUT_MOVE: Fa,
      INPUT_END: Ga,
      INPUT_CANCEL: Ha,
      STATE_POSSIBLE: nb,
      STATE_BEGAN: ob,
      STATE_CHANGED: pb,
      STATE_ENDED: qb,
      STATE_RECOGNIZED: rb,
      STATE_CANCELLED: sb,
      STATE_FAILED: tb,
      DIRECTION_NONE: Ia,
      DIRECTION_LEFT: Ja,
      DIRECTION_RIGHT: Ka,
      DIRECTION_UP: La,
      DIRECTION_DOWN: Ma,
      DIRECTION_HORIZONTAL: Na,
      DIRECTION_VERTICAL: Oa,
      DIRECTION_ALL: Pa,
      Manager: ia,
      Input: x,
      TouchAction: V,
      TouchInput: P,
      MouseInput: L,
      PointerEventInput: M,
      TouchMouseInput: R,
      SingleTouchInput: N,
      Recognizer: Y,
      AttrRecognizer: aa,
      Tap: ga,
      Pan: ba,
      Swipe: fa,
      Pinch: ca,
      Rotate: ea,
      Press: da,
      on: m,
      off: n,
      each: g,
      merge: ta,
      extend: sa,
      assign: la,
      inherit: i,
      bindFn: j,
      prefixed: u,
    });
  var wb = 'undefined' != typeof a ? a : 'undefined' != typeof self ? self : {};
  (wb.Hammer = ha),
    'function' == typeof define && define.amd
      ? define(function () {
          return ha;
        })
      : 'undefined' != typeof module && module.exports
      ? (module.exports = ha)
      : (a[c] = ha);
})(window, document, 'Hammer');
